//可以使用 export MODE来切换对应的环境 export MODE='prd' && node index.js
let env = process.env.MODE || 'dev'
const hash = ".hash"
const spawn = require('child_process').spawn
const execSync = require('child_process').execSync
const fs = require('fs')
var path = require('path');
const pathDir = process.env.path || 'project1'
var commitId = ''
var commitPath = path.join(__dirname, pathDir, 'commit.text')

/**
 * 
 * 
 */

function getHash() {
  // 当你想要从子进程返回大量数据时使用spawn，如果只是返回简单的状态信息，那么使用exec。

  //使用spawn 获取commitid
  // let gitCommit = spawn('git', ['log', '--pretty=format:"%h"', '-1', './' + pathDir])
  // //git提交记录里面的commitid
  // //获取本地存储的commitid，首先判断文件是否存在，不存在创建文件，存在比对内容
  // // stdout 获取标准输出
  // gitCommit.stdout.on('data', function (data) {
  //   commitId = data
  // });
  // // stderr 获取标准错误输出
  // gitCommit.stderr.on('data', function (err) {
  //   console.log('' + err)
  // });

  //使用exec 获取commitid
  commitId = execSync('git log --pretty=format:"%h" -1' + ' ./' + pathDir, {
    'encoding': 'utf8'
  })
}
/**
 * 
 * @returns 
 */
function build() {
  getHash()
  if (!commitId) {
    console.log('没有取到对应的commitId')
    return;
  }
  //判断commit.txt是否存在
  fs.stat(commitPath, function (err, stat) {
    console.log('stat', stat)
    if (stat && stat.isFile()) { //文件commit.txt存在
      console.log('文件commit.txt存在');
      //读入文件内容并判断commitid是否相同
      let commitData = readHashFile()
      if (commitData && commitData == commitId) {
        //不需要打包
        return;
      } 
      else {
        //需要打包，并存入新的commitid
        operate()
      }
    } else { 
      //文件commit.txt不存在或不是标准文件
      //创建文件，需要打包，并存入新的commitid
      operate()
    }
  });
}
function operate(){
  const execSync = require('child_process').execSync
  process.chdir(pathDir);//切换目录到当前的项目中
  console.log('当前所在目录：',process.cwd())
  //  writeResult && npm打包
  console.log('build ...')
  execSync('npm run build', {
    'encoding': 'utf8'
  })
  let writeResult = writeFile(commitId)
}
/**
 * 
 */
function writeHashFile() {
  //创建或写入内容
  fs.writeFileSync(commitPath, commitId, function (err) {
    if (err) {
      console.error('创建或写入文件失败', err)
      return false
    }
    console.log('创建或写入文件成功')
    return true
  });
}

function readHashFile() {
  //读取文件内容
  fs.readFileSync(commitPath, {
    encoding: 'utf8'
  }, function (err, data) {
    if (err) {
      console.error('读取文件失败', err)
      return;
    }
    console.log('读取文件成功')
    return data
  });
}
build()